#ifndef VIDEOSAVE_H
#define VIDEOSAVE_H
/*!
 * \file record.h
 * \brief
 * \version 1.0
 */
#include <QThread>
#include <QDebug>
#include <QMutex>
#include <QSize>
#include <QTimer>
#include <QDateTime>
#include <QDir>
#include <imageconsumer.h>
/**
 * \brief Enregistreur d'images en fichier video
 * \version 1.0
 * Classe d'enregistrement des frames de camera dans un fichier video
 */
class Record : public QThread, public ImageConsumer
{
    Q_OBJECT
private:
    IplImage *cvimage;
    CvVideoWriter *writer;

    bool inRefresh;

    QSize size;
    QString name;
    QString nameDir;

    QTimer *timer;

public:
    /**
      * \fn Record(QSize imageSize, QString videoName)
      * \brief Constructeur
      * Constructeur de la classe Record
      * \param imageSize : taille des images a enregistrer
      * \param videoName : nom du fichier video
      */
    Record(QSize const imageSize, QString const videoName);
    /**
      * \fn ~Record()
      * \brief Destructeur
      * Destructeur de la classe Record
      */
    ~Record();
    /**
      * \fn void run()
      * \brief Lance le thread
      * Lancement de l'enregistrement du flux de la camera dans un fichier video
      */
    void run();
    /**
      * \fn void setSize(QSize imageSize)
      * \brief Definit la taille d'image
      * Definit la resolution de la video, n'a d'effet qu'avant un run()
      * \param imageSize : Resolution de la video a enregistrer
      */
    void setSize(QSize const imageSize);
    /**
      * \fn void setNameTest(QString nameTest)
      * \brief Definit le nom du test
      * Permet de donner le nom du test au dossier contenant la video, n'a d'effet qu'avant l'execution du run()
      * \param nameTest : nom du test
      */
    void setNameTest(QString const nameTest);

signals:
    /**
      * \fn void stopSignal()
      * \brief signal de fermeture
      * Signal envoyer pour stopper le timer lance par run()
      */
    void stopSignal();

public slots:
    /*!
     *  \fn void terminate()
     *  \brief Arret du thread
     *  Surcharge de terminate pour arreter le thread proprement
     */
    void terminate();

private slots:
    void refresh();
};

#endif // VIDEOSAVE_H
